package com.mango.leet.code.easy;

/**
 * 83. 删除排序链表中的重复元素
 */
/**
 * 给定一个已排序的链表的头 head ， 删除所有重复的元素，使每个元素只出现一次 。返回 已排序的链表 。
 *
 *  
 *
 * 示例 1：
 *
 *
 * 输入：head = [1,1,2]
 * 输出：[1,2]
 * 示例 2：
 *
 *
 * 输入：head = [1,1,2,3,3]
 * 输出：[1,2,3]
 *  
 *
 * 提示：
 *
 * 链表中节点数目在范围 [0, 300] 内
 * -100 <= Node.val <= 100
 * 题目数据保证链表已经按升序 排列
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

/**
 * @Author: mango
 * @Date: 2022/4/1 10:40 下午
 */
public class LC83_RemoveDuplicatesSortedList {

     /* Definition for singly-linked list.*/
     public class ListNode {
          int val;
          ListNode next;
          ListNode() {}
          ListNode(int val) { this.val = val; }
          ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     }

    class Solution {
         // 双指针法
        public ListNode deleteDuplicates(ListNode head) {
            if(head == null){
                return head;
            }
            ListNode p1 = head;
            ListNode p2 = head.next;
            while(true){
                while(p2!=null && p1.val == p2.val){
                    p2 = p2.next;
                }
                p1.next = p2;
                p1 = p1.next;
                // 到结尾了，则退出
                if(p2 == null){
                    break;
                }
                p2 = p2.next;
            }
            return head;
        }
    }
}
